package com.example.gss.Service;

import com.example.gss.entity.CourseScore;
import org.springframework.web.multipart.MultipartFile;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * 学业成绩服务接口
 */
public interface CourseScoreService {

    /**
     * 添加成绩记录
     * @param score 成绩记录
     * @return 添加的成绩记录
     */
    CourseScore addScore(CourseScore score);

    /**
     * 根据ID获取成绩记录
     * @param id 成绩ID
     * @return 成绩记录信息
     */
    CourseScore getScoreById(String id);

    /**
     * 获取所有成绩记录
     * @return 成绩记录列表
     */
    List<CourseScore> getAllScores();

    /**
     * 根据学生ID获取成绩记录
     * @param studentId 学生ID
     * @return 成绩记录列表
     */
    List<CourseScore> getScoresByStudentId(String studentId);

    /**
     * 根据课程ID获取成绩记录
     * @param courseId 课程ID
     * @return 成绩记录列表
     */
    List<CourseScore> getScoresByCourseId(String courseId);

    /**
     * 更新成绩记录信息
     * @param id 成绩ID
     * @param score 成绩记录
     * @return 更新后的成绩记录
     */
    CourseScore updateScore(String id, CourseScore score);

    /**
     * 删除成绩记录
     * @param id 成绩ID
     */
    void deleteScore(String id);

    /**
     * 计算指定学生的平均成绩
     * @param studentId 学生ID
     * @return 平均成绩
     */
    BigDecimal calculateAverageScoreByStudentId(String studentId);

    /**
     * 计算指定学生的学位课程平均成绩
     * @param studentId 学生ID
     * @return 学位课程平均成绩
     */
    BigDecimal calculateDegreeCourseAverageScoreByStudentId(String studentId);

    /**
     * 批量导入成绩
     * @param file Excel文件
     * @return 导入结果
     */
    Map<String, Object> batchImportScores(MultipartFile file);
}